package veterinaria.dao;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.Collection;

import veterinaria.util.ConexionDB;
import veterinaria.excepcion.DAOExcepcion;
import veterinaria.modelo.Cita;

public class CitaDAO extends BaseDAO {
        
	public Collection<Cita> burcarPacienteHistorial(int paciente)
			throws DAOExcepcion {
		//System.out.print("mensaje de prueba 1");
		String query = "select idCita, idDoctor, idPaciente, FechaRegistro, FechaAtencion, Hora, descripcion, Emergencia, idVacuna from Cita where idPaciente = ?";
		Collection<Cita> lista = new ArrayList<Cita>();
		Connection con = null;
		PreparedStatement stmt = null;
		ResultSet rs = null;
		try {
			con = ConexionDB.obtenerConexion();
			stmt = con.prepareStatement(query);
			stmt.setInt(1, paciente);
			//stmt.setString(2, Hora);
			rs = stmt.executeQuery();
			while (rs.next()) {
				Cita ci = new Cita();
				ci.setIdCitas(rs.getInt("idCita"));
				ci.setId_doctor(rs.getString("idDoctor"));
				ci.setIdPaciente(rs.getInt("idPaciente"));
				ci.setFechaRegistro(rs.getString("FechaRegistro"));
				ci.setFechaAtencion(rs.getString("FechaAtencion"));
				ci.setHora(rs.getString("Hora"));
				ci.setDescripcion(rs.getString("descripcion"));
				ci.setEmergencia(rs.getInt("Emergencia"));
				ci.setIdVacuna(rs.getInt("idvacuna"));
				
				lista.add(ci);
			}
		} catch (SQLException e) {
			System.err.println(e.getMessage());
			throw new DAOExcepcion(e.getMessage());
		} finally {
			this.cerrarResultSet(rs);
			this.cerrarStatement(stmt);
			this.cerrarConexion(con);
		}
		//System.out.println(lista.size());
		//System.out.println("mensaje de prueba 2");
		return lista;
	}    
	public Collection<Cita> buscarPorFecha(String fechaAtencion, String Hora)
			throws DAOExcepcion {
		//System.out.print("mensaje de prueba 1");
		String query = "select idCita, idDoctor, idPaciente, FechaRegistro, FechaAtencion, Hora, descripcion, Emergencia, idVacuna from Cita where FechaAtencion = ? and Hora = ?";
	   	Collection<Cita> lista = new ArrayList<Cita>();
		Connection con = null;
		PreparedStatement stmt = null;
		ResultSet rs = null;
		try {
			con = ConexionDB.obtenerConexion();
			stmt = con.prepareStatement(query);
			stmt.setString(1, fechaAtencion);
			stmt.setString(2, Hora);
			rs = stmt.executeQuery();
			while (rs.next()) {
				Cita ci = new Cita();
				ci.setIdCitas(rs.getInt("idCita"));
				ci.setId_doctor(rs.getString("idDoctor"));
				ci.setIdPaciente(rs.getInt("idPaciente"));
				ci.setFechaRegistro(rs.getString("FechaRegistro"));
				ci.setFechaAtencion(rs.getString("FechaAtencion"));
				ci.setHora(rs.getString("Hora"));
				ci.setDescripcion(rs.getString("descripcion"));
				ci.setEmergencia(rs.getInt("Emergencia"));
				ci.setIdVacuna(rs.getInt("idVacuna"));
				
				lista.add(ci);
			}
		} catch (SQLException e) {
			System.err.println(e.getMessage());
			throw new DAOExcepcion(e.getMessage());
		} finally {
			this.cerrarResultSet(rs);
			this.cerrarStatement(stmt);
			this.cerrarConexion(con);
		}
		//System.out.println(lista.size());
		//System.out.println("mensaje de prueba 2");
		return lista;
	}    
	
	public Collection<Cita> buscarPorallday(String diaAtencion)
			throws DAOExcepcion {
		//System.out.print("mensaje de prueba 1");
		String query = "select idCita, idDoctor, idPaciente, FechaRegistro, FechaAtencion, Hora, descripcion, Emergencia, idVacuna from Cita where FechaAtencion = ?";
	   	Collection<Cita> lista = new ArrayList<Cita>();
		Connection con = null;
		PreparedStatement stmt = null;
		ResultSet rs = null;
		try {
			con = ConexionDB.obtenerConexion();
			stmt = con.prepareStatement(query);
			stmt.setString(1, diaAtencion);
		
			rs = stmt.executeQuery();
			while (rs.next()) {
				Cita ci = new Cita();
				ci.setIdCitas(rs.getInt("idCita"));
				ci.setId_doctor(rs.getString("idDoctor"));
				ci.setIdPaciente(rs.getInt("idPaciente"));
				ci.setFechaRegistro(rs.getString("FechaRegistro"));
				ci.setFechaAtencion(rs.getString("FechaAtencion"));
				ci.setHora(rs.getString("Hora"));
				ci.setDescripcion(rs.getString("descripcion"));
				ci.setEmergencia(rs.getInt("Emergencia"));
				ci.setIdVacuna(rs.getInt("idVacuna"));
				
				lista.add(ci);
			}
		} catch (SQLException e) {
			System.err.println(e.getMessage());
			throw new DAOExcepcion(e.getMessage());
		} finally {
			this.cerrarResultSet(rs);
			this.cerrarStatement(stmt);
			this.cerrarConexion(con);
		}
		//System.out.println(lista.size());
		//System.out.println("mensaje de prueba 2");
		return lista;
	}    
	
	
	
	public Cita insertar(Cita ci) throws DAOExcepcion {
				
                String query = "insert into Cita (idDoctor, idPaciente, FechaRegistro, FechaAtencion, Hora, Descripcion, Emergencia, idVacuna) values (?,?,?,?,?,?,?,?)";
                
                Connection con = null;
                PreparedStatement stmt = null;
                ResultSet rs = null;
                try {
                        con = ConexionDB.obtenerConexion();
                
                        stmt = con.prepareStatement(query);
          
                        stmt.setString(1, ci.getId_doctor());
                        stmt.setInt(2, ci.getIdPaciente());
                        stmt.setString(3, ci.getFechaRegistro());
                        stmt.setString(4, ci.getFechaAtencion());
                        stmt.setString(5,ci.getHora());
                        stmt.setString(6,ci.getDescripcion());
                        stmt.setInt(7, ci.getEmergencia());
                        stmt.setInt(8, ci.getIdVacuna());
                        
                        //System.out.println(query);
                       // System.out.println("mensaje de citaDAO 3");
                        
                        int i = stmt.executeUpdate();
                        if (i != 1) {
                                throw new SQLException("No se pudo insertar");
                        }
                } catch (SQLException e) {
                        System.err.println(e.getMessage());
                        throw new DAOExcepcion(e.getMessage());
                } finally {
                        this.cerrarResultSet(rs);
                        this.cerrarStatement(stmt);
                        this.cerrarConexion(con);
                }
                return ci;
        }
   
        
        public void eliminar(int idCita) throws DAOExcepcion {
        	//System.out.print(idCita);
    		String query = "delete from Cita WHERE idCita=?";
    		Connection con = null;
    		PreparedStatement stmt = null;
    		try {
    			con = ConexionDB.obtenerConexion();
    			stmt = con.prepareStatement(query);
    			stmt.setInt(1, idCita);
    			int i = stmt.executeUpdate();
    			if (i != 1) {
    				throw new SQLException("No se pudo eliminar");
    			}
    		} catch (SQLException e) {
    			System.err.println(e.getMessage());
    			throw new DAOExcepcion(e.getMessage());
    		} finally {
    			this.cerrarStatement(stmt);
    			this.cerrarConexion(con);
    		}
    	}      
        
    	public Cita obtener(int idCita) throws DAOExcepcion {
    		Cita ci = new Cita();
    		Connection con = null;
    		PreparedStatement stmt = null;
    		ResultSet rs = null;
    		try {
    			String query = "select idCita, idDoctor, idPaciente, FechaRegistro, FechaAtencion, Hora, Descripcion, Emergencia, idVacuna from Cita where idCita=?";
    			con = ConexionDB.obtenerConexion();
    			stmt = con.prepareStatement(query);
    			stmt.setInt(1, idCita);
    			rs = stmt.executeQuery();
    			if (rs.next()) {
    				ci.setIdCitas(rs.getInt("idCita"));
    				ci.setId_doctor(rs.getString("idDoctor"));
    				ci.setIdPaciente(rs.getInt("idPaciente"));
    				ci.setFechaRegistro(rs.getString("FechaRegistro"));
    				ci.setFechaAtencion(rs.getString("FechaAtencion"));
    				ci.setHora(rs.getString("Hora"));
    				ci.setDescripcion(rs.getString("descripcion"));
    				ci.setEmergencia(rs.getInt("Emergencia"));
    				ci.setIdVacuna(rs.getInt("idVacuna"));
    				
    			}
    		} catch (SQLException e) {
    			System.err.println(e.getMessage());
    			throw new DAOExcepcion(e.getMessage());
    		} finally {
    			this.cerrarResultSet(rs);
    			this.cerrarStatement(stmt);
    			this.cerrarConexion(con);
    		}
    		return ci;
    	}

    	public Cita actualizar(Cita ci) throws DAOExcepcion {
    		String query = "update Cita set idDoctor=?, idpaciente=?, FechaRegistro=?, FechaAtencion=?, Hora=?, Descripcion=?, Emergencia=? , idVacuna=? where idCita=?";
    		Connection con = null;
    		PreparedStatement stmt = null;
    		try {
    			con = ConexionDB.obtenerConexion();
    			stmt = con.prepareStatement(query);
    			
    			
    			 stmt.setString(1, ci.getId_doctor());
                 stmt.setInt(2, ci.getIdPaciente());
                 stmt.setString(3, ci.getFechaRegistro());
                 stmt.setString(4, ci.getFechaAtencion());
                 stmt.setString(5,ci.getHora());
                 stmt.setString(6,ci.getDescripcion());
                 stmt.setInt(7, ci.getEmergencia());
                 stmt.setInt(8, ci.getIdVacuna());
                 stmt.setInt(9, ci.getIdCitas());
    			
    			
    			int i = stmt.executeUpdate();
    			if (i != 1) {
    				throw new SQLException("No se pudo actualizar");
    			}
    		} catch (SQLException e) {
    			System.err.println(e.getMessage());
    			throw new DAOExcepcion(e.getMessage());
    		} finally {
    			this.cerrarStatement(stmt);
    			this.cerrarConexion(con);
    		}
    		return ci;
    	}

    	public Collection<Cita> listar() throws DAOExcepcion {
    		Collection<Cita> c = new ArrayList<Cita>();
    		Connection con = null;
    		PreparedStatement stmt = null;
    		ResultSet rs = null;
    		try {
    			con = ConexionDB.obtenerConexion();
    			String query = "select idCita, idDoctor, idPaciente, FechaRegistro, FechaAtencion, Hora, Descripcion, Emergencia, idVacuna from Cita order by FechaAtencion";
    			stmt = con.prepareStatement(query);
    			rs = stmt.executeQuery();
    			while (rs.next()) {
    				
    				Cita ci = new Cita();
    				ci.setIdCitas(rs.getInt("idCita"));
    				ci.setId_doctor(rs.getString("idDoctor"));
    				ci.setIdPaciente(rs.getInt("idPaciente"));
    				ci.setFechaRegistro(rs.getString("FechaRegistro"));
    				ci.setFechaAtencion(rs.getString("FechaAtencion"));
    				ci.setHora(rs.getString("Hora"));
    				ci.setDescripcion(rs.getString("descripcion"));
    				ci.setEmergencia(rs.getInt("Emergencia"));
    				ci.setIdVacuna(rs.getInt("idVacuna"));
    				    				
    				c.add(ci);
    			}

    		} catch (SQLException e) {
    			System.err.println(e.getMessage());
    			throw new DAOExcepcion(e.getMessage());
    		} finally {
    			this.cerrarResultSet(rs);
    			this.cerrarStatement(stmt);
    			this.cerrarConexion(con);
    		}
    		return c;
    	}
    	
    	
    	
    	public Collection<Cita> buscarPorIdDoctor(String idDoctor) throws DAOExcepcion {
    		System.out.println("CitaDAO: listar(String idDoctor)");
    	String query = "select idCita, idDoctor, idPaciente, FechaRegistro, FechaAtencion, Hora, Descripcion, Emergencia, idVacuna from Cita where idDoctor like ?";
 		Collection<Cita> c = new ArrayList<Cita>();
 		Connection con = null;
 		PreparedStatement stmt = null;
 		ResultSet rs = null;
 		try {
 			con = ConexionDB.obtenerConexion();    			
 			stmt = con.prepareStatement(query);
 			stmt.setString(1, "%" + idDoctor + "%");
 			rs = stmt.executeQuery();
 			while (rs.next()) {
 				Cita ci = new Cita();
 				
 				ci.setIdCitas(rs.getInt("idCita"));
				ci.setId_doctor(rs.getString("idDoctor"));
				ci.setIdPaciente(rs.getInt("idPaciente"));
				ci.setFechaRegistro(rs.getString("FechaRegistro"));
				ci.setFechaAtencion(rs.getString("FechaAtencion"));
				ci.setHora(rs.getString("Hora"));
				ci.setDescripcion(rs.getString("descripcion"));
				ci.setEmergencia(rs.getInt("Emergencia"));
				ci.setIdVacuna(rs.getInt("idVacuna"));
 				c.add(ci);
 			}

 		} catch (SQLException e) {
 			System.err.println(e.getMessage());
 			throw new DAOExcepcion(e.getMessage());
 		} finally {
 			this.cerrarResultSet(rs);
 			this.cerrarStatement(stmt);
 			this.cerrarConexion(con);
 		}
 		return c;
 	}
    	public Collection<Cita> buscarPorIdCita(int idCita) throws DAOExcepcion {
    		System.out.println("CitaDAO: listar(int idCita)");
    	String query = "select idCita, idDoctor, idPaciente, FechaRegistro, FechaAtencion, Hora, Descripcion, Emergencia, idVacuna from Cita where idCita like ?";
 		Collection<Cita> c = new ArrayList<Cita>();
 		Connection con = null;
 		PreparedStatement stmt = null;
 		ResultSet rs = null;
 		try {
 			con = ConexionDB.obtenerConexion();    			
 			stmt = con.prepareStatement(query);
 			stmt.setString(1, "%" + idCita + "%");
 			rs = stmt.executeQuery();
 			while (rs.next()) {
 				Cita ci = new Cita();
 				
 				ci.setIdCitas(rs.getInt("idCita"));
				ci.setId_doctor(rs.getString("idDoctor"));
				ci.setIdPaciente(rs.getInt("idPaciente"));
				ci.setFechaRegistro(rs.getString("FechaRegistro"));
				ci.setFechaAtencion(rs.getString("FechaAtencion"));
				ci.setHora(rs.getString("Hora"));
				ci.setDescripcion(rs.getString("descripcion"));
				ci.setEmergencia(rs.getInt("Emergencia"));
				ci.setIdVacuna(rs.getInt("idVacuna"));
 				c.add(ci);
 			}

 		} catch (SQLException e) {
 			System.err.println(e.getMessage());
 			throw new DAOExcepcion(e.getMessage());
 		} finally {
 			this.cerrarResultSet(rs);
 			this.cerrarStatement(stmt);
 			this.cerrarConexion(con);
 		}
 		return c;
 	}	
}